<?php

	require_once CORMO_DIR_CORE.'Object.class.php';
	
	/**
	 * Genera los Objetos Peer<Object> que ser�n utilizados como Base para los Qry<Object>, y se encargan
	 * de definir los metodos necesarios para poder realizar consultas y obtener grupos de objetos rrelacionados
	 * ya persistidos.
	 *
     * @category cormo
     * @package Generator
     * @author Germán Dario Peraferrer <gperaferrer@gmail.com>
     * @copyright Copyright (c) 2007 Germán Dario Peraferrer - Beetec
     * @version 1.0 Beta
     * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
     * @link http://code.google.com/p/cormoframework/
     * @link http://www.beetec.com.ar
	 */
		
	class PeerObject	extends Object {

		function __construct($NameObjectORM) {
			return parent::__construct($NameObjectORM);
		}
		
		function __toString() {
			$retun = "";
			
			/**
			 * Definimos lo Require de la Class
			 */
			
            $retun .=	'  require_once CORMO_DIR_CORE."Peer.class.php";'."\n";
            $retun .=	'  require_once CORMO_DIR_CORE."Peer.interface.class.php";'."\n\n";
						
			/**
			 * Definimos la Class
			 */
			$retun .= '  /**'."\n";
			$retun .= '   * Class generada autom�ticamente cormo.'."\n";
			$retun .= '   * '."\n";
			$retun .= '   * @category cormo'."\n";
			$retun .= '   * @package Peer'."\n";
			$retun .= '   * @author Germ�n Dario Peraferrer <gperaferrer@gmail.com>'."\n";
			$retun .= '   * @copyright Copyright (c) 2007 Germ�n Dario Peraferrer - Beetec'."\n";
			$retun .= '   * @version 1.0 Beta'."\n";
			$retun .= '   * @license http://www.opensource.org/licenses/bsd-license.php New BSD License'."\n";
			$retun .= '   * @link http://code.google.com/p/cormoframework/'."\n";
			$retun .= '   * @link http://www.beetec.com.ar'."\n";
			$retun .= '   */'."\n";
			$retun .= "\n";
       		$retun .= "  abstract class Peer".$this->getConfigObjectName()." extends Peer implements PeerInterface {\n\n";
			
			/**
			 * Definimos el Inicializador de la Class
			 */
			
			$retun .= '    /**'."\n";
			$retun .= '     * Inicializa el Objeto según las especificaciones en Schema. El parametro el parte de la implementación, no tiene efecto su uso.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @param string $nameObjectORM'."\n";
			$retun .= '     * @return Access'."\n";
			$retun .= '     */'."\n";
			$retun .= '    public static function init($nameObjectORM)  {'."\n";
            $retun .= "      parent::init('orm_".$this->getConfigObjectName()."');\n";
            $retun .=	"    }\n\n";
			
            /**
             * Definimos los metodos que estan expresados en la Interface
             */
    	
			$retun .= '    /**'."\n";
			$retun .= '     * Devuelve una instancia a la Conexi�n PDO con la Base de Datos, para poder realizar operaciones en la misma.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @return Access'."\n";
			$retun .= '     */'."\n";
            $retun .= "    public static function getConnection()	{\n";
			$retun .= "      return parent::getConnection();\n";
            $retun .= "    }\n\n";

			$retun .= '    /**'."\n";
			$retun .= '     * Devuelve una instancia a Message, en done podr� encontrar los mensajes que ha generado el ORM.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @return Message'."\n";
			$retun .= '     */'."\n";
            $retun .= '    public static function Message()	{'."\n";
			$retun .= '      return parent::Message();'."\n";
            $retun .= "    }\n\n";

			$retun .= '    /**'."\n";
			$retun .= '     * Devuelve el �ltimo Mensaje generado por el ORM.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @return string'."\n";
			$retun .= '     */'."\n";
            $retun .= "    public static function getMessage()	{\n";
			$retun .= "      return parent::getMessage();\n";
            $retun .= "    }\n\n";

			$retun .= '    /**'."\n";
			$retun .= '     * Devuelve todos los Objetos persistidos de '.$this->getConfigObjectName().'.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @return ArrayObject'."\n";
			$retun .= '     */'."\n";
            $retun .= "    public static function getObjectsAll()  {\n";
			$retun .= "      self::init(null);\n";
			$retun .= "      return parent::getObjectsAll();\n";
			$retun .= "    }\n\n";
    
			$retun .= '    /**'."\n";
			$retun .= '     * Devuelve todos los Objetos persistidos de '.$this->getConfigObjectName().', que coinciden con los Key solicitados.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @param array $pks'."\n";
			$retun .= '     * @return ArrayObject'."\n";
			$retun .= '     */'."\n";
			$retun .= '    public static function getObjectsByPK($pks)  {'."\n"; 
			$retun .= "      self::init(null);\n";
			$retun .= '      return parent::getObjectsByPK($pks)'.";\n";
			$retun .= "    }\n\n";
    
			$retun .= '    /**'."\n";
			$retun .= '     * Devuelve todos los Objetos persistidos de '.$this->getConfigObjectName().', que coinciden con las condiciones establecidas para sus property.'."\n";
			$retun .= '     *'."\n";
			$retun .= '     * @param array $properties'."\n";
			$retun .= '     * @return ArrayObject'."\n";
			$retun .= '     */'."\n";
			$retun .= '    public static function getObjectsByProperty($properties)  {'."\n"; 
			$retun .= "      self::init(null);\n";
			$retun .= '      return parent::getObjectsByProperty($properties)'.";\n";
			$retun .= "    }\n\n";
    
			/**
			 * Cerramos la Class
			 */
			
			$retun .= "  }\n";
			
			return $retun;
		}
		
	}
	
?>